<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>使用weakMap保护属性</title>
</head>
<body>
    <script>
        // // 使用WeakMap定义一个属性
        // const host = new WeakMap();
        // // class Request{
        // //     constructor(name){
        // //         host.set(this,"https://jhskaf.com");
        // //         this.name = name;
        // //     }

        // //     set host(url){
        // //         if(!/^https?:\/\//i.test(url)){
        // //             throw new Error("地址格式错误！");
        // //         }
        // //         host.set(this,url);
        // //     }

        // //     get host(){
        // //         return host.get(this);
        // //     }
        // // }

        // // 这个属性在当前类及其子类是可以访问的，在外部是不可以访问的
        // class Common{
        //     constructor(){
        //         host.set(this,"https://afdgsda.com");
        //     }
        // }

        // class Request extends Common{
        //     constructor(name){
        //         super();
        //         this.name = name;
        //     }

        //     set host(url){
        //         if(!/^https?:\/\//i.test(url)){
        //             throw new Error("地址格式错误！");
        //         }
        //         host.set(this,url);
        //     }

        //     get host(){
        //         return host.get(this);
        //     }
        // }




        // 使用weakMap定义多个属性
        const protects = new WeakMap();
        class Request{
            constructor(name){
                protects.set(this,{
                    host : "https://hjaljkg.com",
                    name
                });
            }

            set host(url){
                if(!/^https?:\/\//i.test(url)){
                    throw new Error("地址格式错误！");
                }
                protects.set(this,{...protects.get(this),url});
            }

            get host(){
                return protects.get(this)['host']
            }
        }

        let request = new Request();
        request.host = "https://hghjg.com";
        console.log(request.host);
    </script>
</body>
</html>